package pe.gob.foncodes.spp.web.controladores.portafolio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import org.primefaces.event.CellEditEvent;
import org.primefaces.event.RowEditEvent;

import pe.gob.foncodes.spp.bs.domain.Entidad;
import pe.gob.foncodes.spp.bs.domain.Focalizacion;
import pe.gob.foncodes.spp.bs.domain.Parametro;
import pe.gob.foncodes.spp.bs.domain.PortafolioFocalizacion;
import pe.gob.foncodes.spp.bs.domain.PortafolioFocalizacionId;
import pe.gob.foncodes.spp.bs.services.SppServices;
import pe.gob.foncodes.spp.web.controladores.ControladorMenu;
import pe.gob.foncodes.spp.web.datamodel.FocalizacionDataModel;

@ManagedBean
@ApplicationScoped
public class ControladorFocalizacion implements Serializable {

	private static final long serialVersionUID = 7555096763426622039L;

	private String anho;
	private Entidad zonal;
	private Entidad departamento;
	private Entidad provincia;
	private Entidad distrito;

	private List<Entidad> zonales;
	private List<Entidad> departamentos;
	private List<Entidad> provincias;
	private List<Entidad> distritos;

	private List<Focalizacion> focalizaciones;
	private Focalizacion[] focalizacion;
	private Focalizacion focalizacionNuevo;

	private PortafolioFocalizacion portafolioFocalizacion;
	private PortafolioFocalizacionId id;

	private List<PortafolioFocalizacion> portafolioFocalizaciones;

	private FocalizacionDataModel focalizacionDataModel;
	
	private List<Parametro> estadosObjetivo;

	@ManagedProperty("#{controladorMenu}")
	private ControladorMenu controladorMenu;

	@ManagedProperty("#{sppServices}")
	private SppServices sppServices;

	public ControladorFocalizacion() {
		zonales = new ArrayList<Entidad>();
		departamentos = new ArrayList<Entidad>();
		provincias = new ArrayList<Entidad>();
		distritos = new ArrayList<Entidad>();
		focalizaciones = new ArrayList<Focalizacion>();
		portafolioFocalizaciones = new ArrayList<PortafolioFocalizacion>();

		zonal = new Entidad();
		departamento = new Entidad();
		provincia = new Entidad();
		distrito = new Entidad();
	}

	@PostConstruct
	public void inicializar() {
		this.controladorMenu = getControladorMenu();
		this.controladorMenu.setTapPortafolio(new Integer(3));
		this.estadosObjetivo = this.sppServices
				.buscarEstadosGeneralesActivoNoActivo();
	}

	public void focalizar() {
		for (int i = 0; i < focalizacion.length; i++) {
			focalizacionNuevo = focalizacion[i];
			id = new PortafolioFocalizacionId(40L,
					focalizacionNuevo.getCodZonal(),
					focalizacionNuevo.getCodDep(),
					focalizacionNuevo.getCodPro(),
					focalizacionNuevo.getCodDis(), "05", 40L,
					focalizacionNuevo.getCodCentroPoblado(),
					focalizacionNuevo.getCodAnho()); 
			this.portafolioFocalizacion = new PortafolioFocalizacion(id, 1L,
					1L, new Date());
			System.out.println(focalizacionNuevo);
			this.sppServices
					.guardarPortafolioFocalizacion(portafolioFocalizacion);
			
			buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito();
			
		}
	}

	private void buscarPortafolioFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito() {
		this.portafolioFocalizaciones = this.sppServices
				.buscarPortafolioFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
						this.anho, this.zonal.getCodigo1(),
						this.departamento.getCodigo1(),
						this.provincia.getCodigo1(), this.distrito.getCodigo1());
	}

	public void buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito() {
		this.focalizaciones = new ArrayList<Focalizacion>();

		this.focalizaciones = this.sppServices
				.buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito(
						this.anho, this.zonal.getCodigo1(),
						this.departamento.getCodigo1(),
						this.provincia.getCodigo1(), this.distrito.getCodigo1());
		if (this.focalizaciones != null && !this.focalizaciones.isEmpty()) {
			this.focalizacionDataModel = new FocalizacionDataModel(
					this.focalizaciones);
		}

		this.controladorMenu = getControladorMenu();
		this.controladorMenu.setTapPortafolio(new Integer(3));
		
		buscarPortafolioFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito();
	}

	public void buscarZonales() {
		this.zonales = this.sppServices.buscarZonalesFocalizalas(this.anho);
		this.departamentos = new ArrayList<Entidad>();
		this.controladorMenu = getControladorMenu();
		this.controladorMenu.setTapPortafolio(new Integer(3));
		this.departamentos = new ArrayList<Entidad>();
	}

	public void buscarDepartamento() {
		this.departamentos = this.sppServices
				.buscarDepartamentosPorZonalesFocalizalas(this.anho,
						this.zonal.getCodigo1());
		this.provincias = new ArrayList<Entidad>();
		this.distritos = new ArrayList<Entidad>();
	}

	public void buscarProvincia() {
		this.provincias = this.sppServices
				.buscarProvinciaPorDepartamentosAndZonalesFocalizalas(
						this.anho, this.zonal.getCodigo1(),
						this.departamento.getCodigo1());
		this.distritos = new ArrayList<Entidad>();
	}

	public void buscarDistrito() {
		this.distritos = this.sppServices
				.buscarDistritoPorProvinciaPorDepartamentosAndZonalesFocalizalas(
						this.anho, this.zonal.getCodigo1(),
						this.departamento.getCodigo1(),
						this.provincia.getCodigo1());
	}

	public void onEdit(RowEditEvent event) {
		if (event.getObject() instanceof PortafolioFocalizacion){
			PortafolioFocalizacion portafolioFocalizacion = (PortafolioFocalizacion)event.getObject();
			System.out.println(portafolioFocalizacion.getId().toString());
			this.sppServices.actualizarPortafolioFocalizacion(portafolioFocalizacion);
		}
		       
        buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito();
    }
     
    public void onCancel(RowEditEvent event) {       
        buscarFocalizacionPorAnhoZonalDepartamentoProvinciaDistrito();
    }
	
	
	
	public String getAnho() {
		return anho;
	}

	public void setAnho(String anho) {
		this.anho = anho;
	}

	public List<Entidad> getZonales() {
		return zonales;
	}

	public void setZonales(List<Entidad> zonales) {
		this.zonales = zonales;
	}

	public List<Entidad> getDepartamentos() {
		return departamentos;
	}

	public void setDepartamentos(List<Entidad> departamentos) {
		this.departamentos = departamentos;
	}

	public List<Entidad> getProvincias() {
		return provincias;
	}

	public void setProvincias(List<Entidad> provincias) {
		this.provincias = provincias;
	}

	public List<Entidad> getDistritos() {
		return distritos;
	}

	public void setDistritos(List<Entidad> distritos) {
		this.distritos = distritos;
	}

	public SppServices getSppServices() {
		return sppServices;
	}

	public void setSppServices(SppServices sppServices) {
		this.sppServices = sppServices;
	}

	public Entidad getZonal() {
		return zonal;
	}

	public void setZonal(Entidad zonal) {
		this.zonal = zonal;
	}

	public Entidad getDepartamento() {
		return departamento;
	}

	public void setDepartamento(Entidad departamento) {
		this.departamento = departamento;
	}

	public Entidad getProvincia() {
		return provincia;
	}

	public void setProvincia(Entidad provincia) {
		this.provincia = provincia;
	}

	public Entidad getDistrito() {
		return distrito;
	}

	public void setDistrito(Entidad distrito) {
		this.distrito = distrito;
	}

	public List<Focalizacion> getFocalizaciones() {
		return focalizaciones;
	}

	public void setFocalizaciones(List<Focalizacion> focalizaciones) {
		this.focalizaciones = focalizaciones;
	}

	public ControladorMenu getControladorMenu() {
		return controladorMenu;
	}

	public void setControladorMenu(ControladorMenu controladorMenu) {
		this.controladorMenu = controladorMenu;
	}

	public FocalizacionDataModel getFocalizacionDataModel() {
		return focalizacionDataModel;
	}

	public void setFocalizacionDataModel(
			FocalizacionDataModel focalizacionDataModel) {
		this.focalizacionDataModel = focalizacionDataModel;
	}

	public Focalizacion[] getFocalizacion() {
		return focalizacion;
	}

	public void setFocalizacion(Focalizacion[] focalizacion) {
		this.focalizacion = focalizacion;
	}

	public List<PortafolioFocalizacion> getPortafolioFocalizaciones() {
		return portafolioFocalizaciones;
	}

	public void setPortafolioFocalizaciones(
			List<PortafolioFocalizacion> portafolioFocalizaciones) {
		this.portafolioFocalizaciones = portafolioFocalizaciones;
	}

	public List<Parametro> getEstadosObjetivo() {
		return estadosObjetivo;
	}

	public void setEstadosObjetivo(List<Parametro> estadosObjetivo) {
		this.estadosObjetivo = estadosObjetivo;
	}

	
}
